package com.ocom.common.utils;

import com.google.gson.*;

import java.lang.reflect.Type;
import java.util.Date;

public class GsonBuilder {
 
	private final static Gson GSON = new Gson();
	
	public static Gson build(){
		return GSON ;
	}


	public static Gson getInstance(){
		// 创建gson对象构建器
		com.google.gson.GsonBuilder gsonBuilder = new com.google.gson.GsonBuilder();
// 实现将long 类型的日期格式转换为国际标准格式
		gsonBuilder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
			public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
				return new Date(json.getAsJsonPrimitive().getAsLong());
			}
		});
// 创建gson对象
		Gson gson = gsonBuilder.create();
		return gson;
	}
	
}


//package com.ocom.common.utils;
//
//import com.google.gson.GsonBuilder;
//import com.google.gson.internal.bind.DateTypeAdapter;
//
//import java.util.Date;
//import java.util.Locale;
//
///**
// * @Description: TODO
// * @Author: 朱晖
// * @Date: 2022/11/3
// **/
//public class Gson {
//	public Gson() {
//		com.google.gson.Gson gson = new GsonBuilder()
//				.registerTypeAdapter(Date.class, new DateTypeAdapter())  // 默认适配器
//				.registerTypeAdapter(Date.class, new CustomDateAdapter(2, 2, Locale.CHINESE))  // yyyy-MM-dd HH:mm:ss
////                .registerTypeAdapter(Date.class, new CustomDateAdapter(0, 0, Locale.CHINESE))  // 2020年11月2日 星期一 上午10时54分01秒 CST
////                .registerTypeAdapter(Date.class, new CustomDateAdapter(0, 1, Locale.CHINESE))  // 2020年11月2日 星期一 上午10时54分34秒
////                .registerTypeAdapter(Date.class, new CustomDateAdapter(0, 3, Locale.CHINESE))  // 2020年11月2日 星期一 上午10:55
////				.registerTypeAdapter(Date.class, new CustomDateAdapter(1, 1, Locale.CHINESE))  // 2020年11月2日 上午11时00分58秒
////                .registerTypeAdapter(Date.class, new CustomDateAdapter(1, 2, Locale.CHINESE))  // 2020年11月2日 10:56:01
////                .registerTypeAdapter(Date.class, new CustomDateAdapter(3, 2, Locale.CHINESE))  // 20-11-2 10:56:29
////                .registerTypeAdapter(Date.class, new CustomDateAdapter(2, 2, Locale.ENGLISH))  // Nov 2, 2020 10:46:51 AM
////                .registerTypeAdapter(Date.class, new CustomDateAdapter(2, 2, Locale.US))       // Nov 2, 2020 10:46:51 AM
////				.registerTypeAdapter(Date.class, new CustomDateAdapter(2, 2, Locale.getDefault())) // 根据服务器不一样而不一样
//				.create();
//	}
//}


//package com.ocom.common.utils;
//
///**
// * @Description: TODO
// * @Author: 朱晖
// * @Date: 2022/11/3
// **/
//
//import com.google.gson.JsonSyntaxException;
//import com.google.gson.TypeAdapter;
//import com.google.gson.internal.bind.util.ISO8601Utils;
//import com.google.gson.stream.JsonReader;
//import com.google.gson.stream.JsonToken;
//import com.google.gson.stream.JsonWriter;
//
//import java.io.IOException;
//import java.text.DateFormat;
//import java.text.ParseException;
//import java.text.ParsePosition;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//import java.util.Locale;
//
///**
// * @author ouyang
// * @version 1.0
// **/
//public class CustomDateAdapter extends TypeAdapter<Date> {
//
//	private final List<DateFormat> dateFormats = new ArrayList<>();
//
//	/**
//	 * Creates a DateFormat with the given time and/or date style in the given
//	 * locale.
//	 * @param timeStyle a value from 0 to 3 indicating the time format,
//	 * ignored if flags is 2
//	 * @param dateStyle a value from 0 to 3 indicating the time format,
//	 * ignored if flags is 1
//	 * @param aLocale the locale for the format
//	 */
//	public CustomDateAdapter(int dateStyle, int timeStyle, Locale aLocale) {
//		this.dateFormats.add(DateFormat.getDateTimeInstance(dateStyle, timeStyle, aLocale));
//	}
//
//	public Date read(JsonReader in) throws IOException {
//		if (in.peek() == JsonToken.NULL) {
//			in.nextNull();
//			return null;
//		} else {
//			return this.deserializeToDate(in.nextString());
//		}
//	}
//
//	private synchronized Date deserializeToDate(String json) {
//		for (DateFormat dateFormat : this.dateFormats) {
//			try {
//				return dateFormat.parse(json);
//			} catch (ParseException ignored) {
//			}
//		}
//
//		try {
//			return ISO8601Utils.parse(json, new ParsePosition(0));
//		} catch (ParseException var5) {
//			throw new JsonSyntaxException(json, var5);
//		}
//	}
//
//	public synchronized void write(JsonWriter out, Date value) throws IOException {
//		if (value == null) {
//			out.nullValue();
//		} else {
//			String dateFormatAsString = this.dateFormats.get(0).format(value);
//			out.value(dateFormatAsString);
//		}
//	}
//}